package com.erainm;

import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;

import java.util.List;

/**
 * zkClient如何使用监听器
 */
public class Get_Child_Change {
    public static void main(String[] args) throws InterruptedException {
        //获取到zkClient
        final ZkClient zkClient = new ZkClient("lg01:2181");
        //zkClient对指定⽬录进行监听(不存在⽬目录:/lg-client)，指定收到通知之后的逻辑
        //对 /lag-client注册了了监听器，监听器是一直监听
        zkClient.subscribeChildChanges("/lg-client", new IZkChildListener() {
            // 该方法是接收到通知之后的执行逻辑定义
            @Override
            public void handleChildChange(String path, List<String> childs) throws Exception {
                System.out.println(path + " childs changes ,current childs " + childs);
            }
        });
        //使⽤zkClient创建节点，删除节点，验证监听器是否运⾏
        zkClient.createPersistent("/lg-client");
        Thread.sleep(1000);
        //只是为了方便观察结果数据
        zkClient.createPersistent("/lg-client/c1");
        Thread.sleep(1000); zkClient.delete("/lg-client/c1");
        Thread.sleep(1000);
        zkClient.delete("/lg-client");
        Thread.sleep(Integer.MAX_VALUE);
        /*
            1 监听器可以对不存在的目录进行监听
            2 监听⽬录下⼦节点发⽣改变，可以接收到通知，携带数据有子节点列表
            3 监听目录创建和删除本身也会被监听到
        */
    }
}
